package com.csnf.util;

/**
 * 查询分页工具类，用于处理分页逻辑。
 *
 * @author 好有经验
 */
public final class PageUtil {
    // 当前页
    private Integer index;
    // 每页个数
    private Integer count;
    // 总数
    private Integer total;
    // 行数起始值
    private Integer pageStart;

    /**
     * 构造函数，创建一个带有当前页和每页个数的 PageUtil 对象。
     *
     * @param index 当前页
     * @param count 每页个数
     */
    public PageUtil(Integer index, Integer count) {
        this.index = index;
        this.count = count;
    }

    /**
     * 默认构造函数。
     */
    public PageUtil() {
    }

    /**
     * 判断是否存在上一页。
     *
     * @return 如果存在上一页则返回 true，否则返回 false
     */
    public Boolean isHasPrev() {
        return index >= 1;
    }

    /**
     * 判断是否存在下一页。
     *
     * @return 如果存在下一页则返回 true，否则返回 false
     */
    public Boolean isHasNext() {
        return index + 1 < getTotalPage();
    }

    /**
     * 计算总页数。
     *
     * @return 总页数
     */
    public Integer getTotalPage() {
        return (int) Math.ceil((double) total / count);
    }

    /**
     * 获取行数起始值。
     *
     * @return 行数起始值
     */
    public Integer getPageStart() {
        if (index != null) {
            return index * count;
        } else {
            return pageStart;
        }
    }

    /**
     * 设置行数起始值。
     *
     * @param pageStart 行数起始值
     * @return 当前 PageUtil 对象
     */
    public PageUtil setPageStart(Integer pageStart) {
        this.pageStart = pageStart;
        return this;
    }

    /**
     * 获取当前页。
     *
     * @return 当前页
     */
    public Integer getIndex() {
        return index;
    }

    /**
     * 设置当前页。
     *
     * @param index 当前页
     * @return 当前 PageUtil 对象
     */
    public PageUtil setIndex(Integer index) {
        this.index = index;
        return this;
    }

    /**
     * 获取每页个数。
     *
     * @return 每页个数
     */
    public Integer getCount() {
        return count;
    }

    /**
     * 设置每页个数。
     *
     * @param count 每页个数
     * @return 当前 PageUtil 对象
     */
    public PageUtil setCount(Integer count) {
        this.count = count;
        return this;
    }

    /**
     * 获取总数。
     *
     * @return 总数
     */
    public Integer getTotal() {
        return total;
    }

    /**
     * 设置总数。
     *
     * @param total 总数
     * @return 当前 PageUtil 对象
     */
    public PageUtil setTotal(Integer total) {
        this.total = total;
        return this;
    }
}
